home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Revolution - Das Atari CD Magazin 1997
/
Revolution - Das Atari CD Magazin 1.iso
/
software
/
anwendng
/
qed_397
/
sourcen
/
seproto.h
< prev
next >
Wrap
Text File
|
1997-01-08
|
12KB
|
305 lines
/* SE-Protokoll zur Kommunikation zwischen Shells zur Programmentwicklung
* und Editoren.
*
* Dieses Protokoll dient dazu, unter Multitasking-Systemen die Shell
* zur Compilierung und ähnlichen Sachen zu veranlassen, und um Fehler-
* meldungen und/oder Fehlerdateien an den Editor zurückzugeben.
*
* Kommandos bzw. Nachrichten von der Shell zum Editor beginnen
* mit SE_, Nachrichten vom Editor zur Shell beginnen mit ES_
*
* Da teilweise Zeiger auf Speicherbereiche übergeben werden, ist vom
* jeweiligen Absender der Nachricht darauf zu achten, daß diese
* Speicherbereiche vom Empfänger auch lesbar sind (Memory Protection!).
* Dafür sind diese als Readable zu allozieren!
*
*/
#define SEPROTOVERSION 0x104 /* Die Versionsnummer des Protokolls.
* Highbyte ist die Major Number
* Lowbyte ist die Lower Number
*/
/*
* Erweiterungen
*
* Datum Version Änderungen
*
* 30.01.96 1.01 SE_CLOSE für Dateien/Masken, mit Close-Flag
* msg[5] = 0 -> nur sichern
* msg[5] = 1 -> sichern + schließen
* ES/SE_PROJEKT mit leerem Argument (NULL)
* Um zur Version 0x100 kompatibel zu sein, sollte
* das Programm die Versionsnummer überprüfen!!
*
* 13.08.96 1.02 SE_OPEN mit Zeilen- und Spaltennummer
* neue Nachricht SE_MENU
*
* 19.11.96 1.03 bei ES_COMPILE kann der Dateiname auch NULL sein
*
* 08.01.97 1.04 SE_CLOSE: Flag 2
* SE_MENU: progName
*/
#define SE_INIT 0x4200
/* Die Shell fragt an, ob ein Editor das SE-Protokoll
* versteht.
* Wort 3: Ein Bitset, welche Nachrichten die Shell versendet
* Wort 4+5: Ein Bitset, welche Editorkommandos verstanden werden
* Wort 6: Unterstütze Versionsnummer des Protokolls
* Als Antwort erhält es ein ES_OK vom Editor.
*/
#define SE_OK 0x4201
/* Die Shell sagt dem Editor, das sie das Protokoll
* versteht.
* Wort 3: Ein Bitset, welche Nachrichten die Shell versendet
* Wort 4+5: Ein Bitset, welche Editorkommandos verstanden werden
* Wort 6: Unterstütze Versionsnummer des Protokolls
* Wort 7: Die ApId des Programmes, dessen Nachricht beantwortet wird
*/
#define SE_ACK 0x4202
/* Die Shell bestätigt den Empfang eines Editorkommandos und gibt zurück,
* ob das Kommando ausgeführt wird.
* Wort 3: TRUE: Kommando wird verstanden und ausgeführt.
* FALSE: Das Kommando wird nicht verstanden
* Eine SE_ACK mit TRUE sagt nichts darüber aus, ob das Kommando erfolg-
* reich ausgeführt wurde. Es sagt nur, daß die Shell das Kommando
* versteht und ausführen wird!
*/
#define SE_OPEN 0x4203
/* Die Shell sagt dem Editor, daß er einen Text öffnen
* soll. Als Antwort erhält die Shell ein ES_ACK
* Wort 3+4: Ein Zeiger auf den Filenamen des zu öffnenden Files
* Wort 5+6: Cursorposition (Zeilennummer)
* Wort 7 : Cursorposition (Spaltennummer)
*/
#define SE_ERROR 0x4204
/* Es ist ein Fehler beim Compilieren aufgetreten.
* Wort 3+4: Ein Zeiger auf eine Infostruktur, die wie folgt
* aufgebaut ist:
* Wort 0+1: Ein Zeiger auf den Namen des compilierten Textes.
* Wort 2+3: Ein Zeiger auf den Text der Fehlermeldung
* Wort 4 : Die Fehlernummer
* Wort 5+6: Die fehlerhafte Zeile
* Wort 7 : Die Spalte mit dem Fehler (oder 0)
* Mit ES_ACK bestätigt der Editor die Meldung.
*/
#define SE_ERRFILE 0x4205
/* Es sind Fehler aufgetreten. Die Fehlermeldungen stehen in einem
* Errorfile, welches in der Message spezifiziert wird.
* Wort 3+4: Ein Zeiger auf den Filenamen des Errorfiles mit den
* Fehlermeldungen
* Wort 5+6: Ein Zeiger auf den Namen des compilierten Textes
* Mit ES_ACK bestätigt der Editor die Meldung.
*/
#define SE_PROJECT 0x4206
/* Die Shell teilt dem Editor mit, daß das Projekt geändert wurde.
* Der Filename des aktuellen Projektfiles wird als Parameter übergeben
* Wird NULL übergeben, sollte das aktuelle Projekt abgemeldet werden.
* Wort 3+4: Ein Zeiger auf den Namen des Projektfiles oder NULL
* Der Editor bestätigt mit ES_ACK.
* Eine vernünftige Reaktion des Editors wäre es in dem Fall,
* ebenfalls das Projekt zu wechseln, sofern er diese unterstützt.
*/
#define SE_QUIT 0x4207
/* Die Shell teilt dem Editor mit, daß sie jetzt beendet wird.
* Der Editor sollte in dem Fall die Shell als Kommunikationspartner
* vergessen.
* Parameter gibt es keine.
* Es wird keine Antwort erwartet!
*/
#define SE_TERMINATE 0x4208
/* Die Shell teilt dem Editor mit, daß dieser sich beenden soll.
* Der Editor sollte in dem Fall sich selbst beenden und seinen ganz
* normalen Terminierungsprozeß durchlaufen (und in dem auch ein ES_QUIT
* schicken!). Der Grund für so eine Meldung der Shell könnte zum Beispiel
* zu wenig Speicher zum compilieren sein.
* Mit ES_ACK bestätigt der Editor die Meldung.
*/
#define SE_CLOSE 0x4209
/* Die Shell teilt dem Editor mit, daß dieser bestimmte Texte sichern
* bzw. schließen soll. Beim Schließen von geänderten Texten sollte der
* Editor vorher nachfragen.
* Wort 3+4: Ein Zeiger auf den Namen einer Datei oder eine Dateimaske.
* '*.*' steht für alle Textfenster (entspricht also dem SE_CLOSE
* der Protokoll-Version 0x100).
* Wort 5 : 0 = nur sichern
* 1 = sichern und schließen
* 2 = schließen ohne sichern
* Mit ES_ACK bestätigt der Editor die Meldung.
*/
#define SE_MENU 0x420A
/* Die Shell teilte dem Editor mit, was er für die einzelnen Programme
* in sein Menü eintragen soll.
*
* Word 3+4: Ein Zeiger auf eine SEMENUINFO-Struktur mit den Einträgen.
* Mit ES_ACK bestätigt der Editor die Meldung.
*/
#define ES_INIT 0x4240
/* Ein Editor fragt an, ob eine Shell das SE-Protokoll versteht.
* Wort 3: Ein Bitset, welche Shellnachrichten verstanden werden
* Wort 4+5: Ein Bitset, welche Editorkommandos versendet werden
* Wort 6: Unterstütze Versionsnummer des Protokolls
* Als Antwort erhält es SE_OK von der Shell
*/
#define ES_OK 0x4241
/* Der Editor beantwortet die Anfrage der Shell nach dem Protokoll.
* Wort 3: Ein Bitset, welche Shellnachrichten verstanden werden
* Wort 4+5: Ein Bitset, welche Editorkommandos versendet werden
* Wort 6: Unterstütze Versionsnummer des Protokolls
* Wort 7: Die ApId des Programmes, dessen Nachricht beantwortet wird
*/
#define ES_ACK 0x4242
/* Der Editor bestätigt den Empfang des Kommandos
* Wort 3: TRUE: Kommando wird verstanden und ausgeführt.
* FALSE: Das Kommando wird nicht verstanden
* Eine ES_ACK mit TRUE sagt nichts darüber aus, ob das Kommando erfolg-
* reich ausgeführt wurde. Es sagt nur, daß der Editor das Kommando
* versteht und ausführen wird!
*/
#define ES_COMPILE 0x4243
/* Der Editor sagt der Shell, daß sie ein File übersetzen soll.
* Ein Pointer auf den Dateinamen wird in der Message übergeben.
* Wort 3+4: Zeiger auf den Namen der zu compilierenden Datei
* (oder NULL).
* Diese Nachricht muß mit SE_ACK bestätigt werden.
*/
#define ES_MAKE 0x4244
/* Der Editor sagt der Shell, daß sie ein Make ausführen soll.
* Ein Filename kann in der Message übergeben werden, muß aber
* nicht gesetzt sein und muß von der Shell auch nicht beachtet
* werden!
* Wort 3+4: Zeiger auf den Namen des Makefiles (oder NULL)
* Die Shell bestätigt mit SE_ACK.
*/
#define ES_MAKEALL 0x4245
/* Der Editor sagt der Shell, daß ein komplettes Make All ausgeführt
* werden soll. Ein Filename für das Makefile kann (muß nicht) in
* der Message übergeben werden.
* Wort 3+4: Zeiger auf den Namen des Makefiles (oder NULL)
* Die Shell bestätigt mit SE_ACK.
*/
#define ES_LINK 0x4246
/* Der Editor sagt der Shell, daß das Programm
* gelinkt werden soll. Ein Filename kann
* in der Message übergeben werden, muß aber
* nicht unbedingt beachtet werden von der Shell!
* Wort 3+4: Zeiger auf den Namen der Source, die gelinkt werden soll
* (oder NULL)
* Die Shell bestätigt mit SE_ACK.
*/
#define ES_EXEC 0x4247
/* Der Editor sagt der Shell, daß das Programm
* zu der Source ausgeführt werden soll. Ein
* Filename kann übergeben werden, muß von der
* Shell aber nicht beachtet werden.
* Wort 3+4: Zeiger auf den Namen des auszuführenden Files (oder NULL)
* Bei einer Sourcedatei ist diese ggf. noch zu
* compilieren und/oder zu linken
* Die Shell bestätigt mit SE_ACK.
*/
#define ES_MAKEEXEC 0x4248
/* Die Shell soll ein Make ausführen und danach das Programm ausführen.
* Ein Filename für das Makefile kann (muß nicht) in der Message
* übergeben werden.
* Wort 3+4: Zeiger auf den Namen des Makefiles (oder NULL)
* Die Shell bestätigt mit SE_ACK.
*/
#define ES_PROJECT 0x4249
/* Der Editor teilt der Shell mit, daß das Project geändert/gewechselt
* wurde. Der Filename des Projektfiles wird als Parameter in der Message
* übergeben. Wird NULL übergeben, sollte das aktuelle Projekt abgemeldet
* werden.
* Wort 3+4: Zeiger auf den Namen des Projektfiles oder NULL.
* Die Shell bestätigt mit SE_ACK.
* Eine vernünftige Reaktion der Shell wäre in dem Fall, ebenfalls
* das Projekt zu wechseln, sofern sie diese unterstützt.
*/
#define ES_QUIT 0x424A
/* Der Editor teilt der Shell mit, daß er jetzt beendet wird.
* Die Shell sollte in dem Fall den Editor als Kommunikationspartner
* vergessen.
* Parameter gibt es keine.
* Es wird keine Antwort erwartet!
*/
/* Typdefinitionen für die Nachrichten */
/* Dies definiert die einzelnen Bits, welche Nachrichten unterstützt werden */
/* Shell-Kommandos
*/
#define _SEINIT 0x0001
#define _SEOK 0x0002
#define _SEACK 0x0004
#define _SEOPEN 0x0008
#define _SEERROR 0x0010
#define _SEERRFILE 0x0020
#define _SEPROJECT 0x0040
#define _SEQUIT 0x0080
#define _SETERMINATE 0x0100
#define _SECLOSE 0x0200
#define _SEMENU 0x0400
/* Editor-Kommandos
*/
#define _ESINIT 0x0001
#define _ESOK 0x0002
#define _ESACK 0x0004
#define _ESCOMPILE 0x0008
#define _ESMAKE 0x0010
#define _ESMAKEALL 0x0020
#define _ESLINK 0x0040
#define _ESEXEC 0x0080
#define _ESMAKEEXEC 0x0100
#define _ESPROJECT 0x0200
#define _ESQUIT 0x0400
/* Die Nachricht SE_ERROR liefert einen Zeiger auf diese Struktur:
*/
typedef struct
{
char *errFile; /* Zeiger auf den Namen der compilierten Datei */
char *errMess; /* Zeiger auf die Fehlermeldung */
int errNum; /* Die Fehlernummer */
long errLine; /* Die fehlerhafte Zeile */
int errRow; /* Die Spalte mit dem Fehler (oder 0) */
} ERRINFO;
/* Die Nachricht SE_MENU verwendet einen Zeiger auf diese Struktur:
*/
typedef struct
{
char *compStr;
char *makeStr;
char *makeAllStr;
char *linkStr;
char *execStr;
char *makeExecStr;
char *progName;
} SEMENUINFO;